#include <easyx.h>
#include <iostream>
#include <stdlib.h>

void menu(HWND);
void updateMenu();
void clickMenuOpt(int);

int main()
{
	HWND hwnd = GetHWnd();
	// 加载选择界面
	menu(hwnd);

	return 0;
}

void menu(HWND hwnd)
{
	SetWindowText(hwnd, "snake");
	initgraph(900, 700, EW_SHOWCONSOLE);
	setbkmode(TRANSPARENT);

	updateMenu();
	setfillcolor(RED);
	fillrectangle(390, 120, 510, 160);
	outtextxy(418, 132, "单人模式");

	// 键盘鼠标检测循环
	ExMessage mkmsg;
	short isMsTrue = 0;
	int menuNum = 0;

	while (true)
	{
		mkmsg = getmessage(EM_MOUSE | EM_KEY);

		switch (mkmsg.message)
		{
		case WM_MOUSEMOVE:
			// 鼠标移动
			//std::cout << mkmsg.x << " " << mkmsg.y << std::endl;
			// 判断是否在选取内
			if (mkmsg.x >= 390 && mkmsg.x <= 510 && mkmsg.y >= 120 && mkmsg.y <= 160)
			{
				if (isMsTrue != 1)
				{
					updateMenu();
					//std::cout << "1" << std::endl;
					setfillcolor(RED);
					fillrectangle(390, 120, 510, 160);
					outtextxy(418, 132, "单人模式");
					isMsTrue = 1;
					menuNum = 0;
				}
			}
			else if (mkmsg.x >= 390 && mkmsg.x <= 510 && mkmsg.y >= 260 && mkmsg.y <= 300)
			{
				if (isMsTrue != 2)
				{
					updateMenu();
					//std::cout << "2" << std::endl;
					setfillcolor(RED);
					fillrectangle(390, 260, 510, 300);
					outtextxy(418, 272, "双人模式");
					isMsTrue = 2;
					menuNum = 1;
				}
			}
			else if (mkmsg.x >= 390 && mkmsg.x <= 510 && mkmsg.y >= 400 && mkmsg.y <= 440)
			{
				if (isMsTrue != 3)
				{
					updateMenu();
					//std::cout << "3" << std::endl;
					setfillcolor(RED);
					fillrectangle(390, 400, 510, 440);
					outtextxy(418, 412, "游戏设置");
					isMsTrue = 3;
					menuNum = 2;
				}
			}
			else if (mkmsg.x >= 390 && mkmsg.x <= 510 && mkmsg.y >= 540 && mkmsg.y <= 580)
			{
				if (isMsTrue != 4)
				{
					updateMenu();
					//std::cout << "4" << std::endl;
					setfillcolor(RED);
					fillrectangle(390, 540, 510, 580);
					outtextxy(418, 552, "游戏帮助");
					isMsTrue = 4;
					menuNum = 3;
				}
			}
			else
			{
				isMsTrue = 0;
			}
			break;

		case WM_LBUTTONDOWN:
			// 鼠标左键按下
			if (isMsTrue == 1) { clickMenuOpt(menuNum+1); }
			if (isMsTrue == 2) { clickMenuOpt(menuNum+1); }
			if (isMsTrue == 3) { clickMenuOpt(menuNum+1); }
			if (isMsTrue == 4) { clickMenuOpt(menuNum+1); }
			break;
		case WM_KEYDOWN:
			//std::cout << mkmsg.vkcode << std::endl;
			if (mkmsg.vkcode == 'W' || mkmsg.vkcode == '&') { menuNum = (menuNum-1) % 4; }
			else if (mkmsg.vkcode == 'S' || mkmsg.vkcode == '(') { menuNum = (menuNum+1) % 4; }
			else if (mkmsg.vkcode == 'A' || mkmsg.vkcode == '%') { menuNum = (menuNum-1) % 4; }
			else if (mkmsg.vkcode == 'D' || mkmsg.vkcode == '\'') { menuNum = (menuNum+1) % 4; }
			else if (mkmsg.vkcode == 0x0D) { clickMenuOpt(menuNum+1); }
			//std::cout << menuNum << std::endl;

			if ((menuNum+4)%4 == 0)
			{
				updateMenu();
				setfillcolor(RED);
				fillrectangle(390, 120, 510, 160);
				outtextxy(418, 132, "单人模式");
				isMsTrue = 1;
			}
			if ((menuNum+4)%4 == 1)
			{
				updateMenu();
				setfillcolor(RED);
				fillrectangle(390, 260, 510, 300);
				outtextxy(418, 272, "双人模式");
				isMsTrue = 2;
			}
			if ((menuNum+4)%4 == 2)
			{
				updateMenu();
				setfillcolor(RED);
				fillrectangle(390, 400, 510, 440);
				outtextxy(418, 412, "游戏设置");
				isMsTrue = 3;
			}
			if ((menuNum+4)%4 == 3)
			{
				updateMenu();
				setfillcolor(RED);
				fillrectangle(390, 540, 510, 580);
				outtextxy(418, 552, "游戏帮助");
				isMsTrue = 4;
			}
		}
		/*
		if (GetAsyncKeyState(VK_UP)&1)
		{
			printf("vkup\n");
		}
		if (GetAsyncKeyState(VK_DOWN)&1)
		{
			printf("vkdown\n");
		}
		if (GetAsyncKeyState(VK_LEFT)&1)
		{
			printf("vkleft\n");
		}
		if (GetAsyncKeyState(VK_RIGHT)&1)
		{
			printf("vkright\n");
		}
		*/
	}
	closegraph();
}

void clickMenuOpt(int optNum)
{
	std::cout << optNum << std::endl;
}

void updateMenu()
{
	settextcolor(BLUE);
	setfillcolor(WHITE);

	fillrectangle(390, 120, 510, 160);
	fillrectangle(390, 260, 510, 300);
	fillrectangle(390, 400, 510, 440);
	fillrectangle(390, 540, 510, 580);

	outtextxy(418, 132, "单人模式");
	outtextxy(418, 272, "双人模式");
	outtextxy(418, 412, "游戏设置");
	outtextxy(418, 552, "游戏帮助");
}
